# object特殊属性与方法
'''
特殊属性
    __dict__() 获得类对象或实例对象所绑定的所有属性和方法的宇典

特殊方法
    __len__()通过重写_len_0方法，让内置函数len0的参数可以是自定义类型
    __add__()通过重写 add_0方法，可使用自定义对象具有“+”功能
    __new__()用于创建对象
    __init__()对创建的对象进行初始化                                 '''
print('-------------------object特殊属性--------------------')
class A(object):
    pass
class B(object):
    pass
class C(A,B):
    def __init__(self, name, age):
        self.name = name
        self.age = age

c1 = C('张三', 23)
print('__dict__() 函数：', c1.__dict__)
print('__class__()函数：获取所属类', c1.__class__)
print(C.__bases__) # 查看父类 类型的元素
print(C.__base__) # 查看类的基类
print(C.__mro__)  # 查看类的层次结构
print(A.__subclasses__()) # 查看子类列表



print('-------------------object特殊方法--------------------')
class Student(object):
    def __init__(self, name):
        self.name = name

    ##重写object add() 两个对象的拼接
    def __add__(self, other):
        return self.name + other.name

    ##重写object len() 获取对象属性长度
    def __len__(self):
        return len(self.name)

s1 = Student("张三")
s2 = Student("李四")
print(s1.__add__(s2))
print(s1.__len__())





